#Apriori算法 关联分析算法
#频繁项集frequent item sets是经常出现在一起的集合
#关联规则association rules那是两种物品之间可能存在很强的关系

#一个项集的支持度 数据集中包含该项集的纪录所长的比例
#可信度 针对一条关联规则来定义的{尿布}->{葡萄酒}，可信度 = 支持度（{尿布，葡萄酒}/支持度（{尿布}））
import apriori
dataSet = apriori.loadDataSet()
print("dataSet\n",dataSet)
#创建单一数据集合
C1 = apriori.createC1(dataSet)
print("C1\n",C1)
#去掉不满足的最小支持度的项集
#D = map(set,dataSet)
L1,suppData0 = apriori.scanD(dataSet,C1,0.5)
print("L1\n",L1)
print("suppData0\n",suppData0)

#尝试下aprioriGen
#list2 = apriori.aprioriGen(L1,2)
#print("list2\n",list2)
L,suppData = apriori.apriori(dataSet)
print("L\n",L)
print("dataSet\n",dataSet)
print("suppData\n",suppData)

#################下面找到的都是关联规则强的，即是可信度强的集合#######################
rules = apriori.generateRules(L,suppData,minConf = 0.5)
print("rules\n",rules)

######################中毒蘑菇的特征分析##############
#第一特征表示有毒或可食用
#第二特征表示蘑菇伞的形状，有六种的可能
mushDatSet = [line.split() for line in open('mushroom.dat').readlines()]
print("mushroom\n",mushDatSet)
L,suppData = apriori.apriori(mushDatSet,minSupport = 0.3)
for item in L[3]:
    if item.intersection('2'):
        print(item)